package hwThree5;

import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.ST;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;

import java.util.ArrayList;

public class LookupCSV {
    public static void main(String[] args) {
        // 从命令行参数获取文件名和列索引
        String filename = args[0]; // CSV 文件名
        int keyField = Integer.parseInt(args[1]); // 键所在的列
        int valueField = Integer.parseInt(args[2]); // 值所在的列

        // 创建符号表，键是 String，值是 ArrayList<String>
        ST<String, ArrayList<String>> st = new ST<>();

        // 读取 CSV 文件
        In in = new In(filename);
        while (in.hasNextLine()) {
            String line = in.readLine();
            String[] tokens = line.split(",");

            // 获取键和值
            String key = tokens[keyField];
            String value = tokens[valueField];

            // 如果键尚未存在于符号表中，将其初始化为一个空列表
            if (!st.contains(key)) {
                st.put(key, new ArrayList<>());
            }

            // 将值添加到键对应的列表中
            st.get(key).add(value);
        }

        // 读取标准输入，查询键并输出其所有关联值
        while (!StdIn.isEmpty()) {
            String query = StdIn.readString();

            if (st.contains(query)) {
                // 获取键关联的所有值
                ArrayList<String> values = st.get(query);
                StdOut.println(query + ": " + values);
            } else {
                StdOut.println(query + ": Not found");
            }
        }
    }
}
